package cn.ipanel.bigdata.dw.dim
import cn.ipanel.bigdata.boot.config.Configuration
import cn.ipanel.bigdata.boot.date.{Day, Time}
/**
 * @author lzz
 * @projectName iBigdata
 * @date 2022/5/13 10:58
 * @description:
 */
object Test{
  def main(args: Array[String]): Unit = {
    // 测试scala 反射
    testReflection()

    // 测试scala 配置读取
//    testConfRead()
  }

  def testConfRead(): Unit ={
    println(Configuration.getProjectName())
  }

  def testReflection(): Unit={
    val cls = this.getClass.getName
    println(cls)
    println(cls.substring(0, cls.lastIndexOf(".")))
    val newCls1 = Class.forName(cls.substring(0, cls.lastIndexOf(".")) + "." + "hunan" + "." + "ExtraUserView")
    println(newCls1)
//    // 以下参考来自于：https://blog.csdn.net/feloxx/article/details/76034023
//    // 对 class 类型，通过反射 newInstance 调用即可
//    println(newCls1.newInstance().asInstanceOf[ExtraUserViewTrait].loadSql())
//    // 对 object 类型，不能通过 newInstance 的方式，因为没有定义无参构造函数，会报错（本来就不需要）
//    // 可以使用如下方式
    println(newCls1.getDeclaredMethod("loadSql", classOf[Day]).invoke(null, Day("20220101")))

    val newCls2 = Class.forName(cls.substring(0, cls.lastIndexOf(".")) + "."  + "ExtraUserView")
    println(newCls2)
    println(newCls2.getDeclaredMethod("loadSql", classOf[Day]).invoke(null, Day("20220101")))
  }
}
